18
תגובות
שלום,
תודה על המדריך הנפלא שמסביר על חלוקה לעמודים. זה עזר לי מאד!
שאלתי על החיבור בין חלוקה לעמודים עם חיפוש באתר.
אני רוצה שתוצאות החיפוש יחולקו לעמודים,
אך כיוון שמוגדר לו שבכל פעם שלוחץ על "חפש" יתבצע חיפוש הוא לא נותן את המענה במעבר למספר עמוד אחר אלא רק בלחיצה שוב על חפש.
כיצד אני כותבת שבלחיצה על לינק <'echo "<a href='?page=$i
הלינק הוא מספרי עמודים שיעבור אל המשך הרשימה.

תודה רבה

18 תשובות

avatar ענה Splash ב 16 לאוגוסט 2015 #

אם תציגי כאן את הקוד יהיה יותר קל להבין את הבעיה.
כרגע יש לך בדיקה האם נלחץ הכפתור "חפש" ורק אז מתבצע החיפוש ?

avatar ענה intval ב 16 לאוגוסט 2015 #

רוב הסיכויים שזה קורה בגלל שהקישור

a href='?page=$i

לא אומר לשרת שצריך לבצע חיפוש שוב ולכן השרת לא מבצע חיפוש.
אולי הקישור צריך להיות משהו כזה?

a href='?search=blabla&page=$i

?

avatar ענה mirim ב 16 לאוגוסט 2015 #

תודה על ניסיון העזרה,
שאלתי ה search=blabla שכתבתה
מה אמור להיות במקום ה -blabla ?
החיפוש לא נכתב תחת פונקציה או שם מסויים אלא _post
אשמח לתשובתכם

avatar ענה Splash ב 18 לאוגוסט 2015 #

$_POST מכיל מערך של הנתונים שקיבלת ב post,באותה מידה את יכולה להחליף את ה method של הטופס ל get ואז להשתמש ב $_GET בבדיקות.
ואז גם תוכלי להשתמש בשיטה שאלכס הציע לך.

כרגע יש לך משהו כזה -

if(isset($_POST['search'])){
            query("SELECT... WHERE col = ".$_POST['search']);
        }
       
        .....
        <form method="post">


את תצטרכי להחליף ל -

if(isset($_GET['search'])){
            query("SELECT... WHERE col = ".$_GET['search']);
        }

        .....
        <form method="get">


ואז כשאת בונה את הקישורים של העמודים לשרשר לתוכם גם את המשתנה search.
אם תציגי את הקוד הנוכחי יהיה יותר קל להסביר לך.

avatar ענה mirim ב 19 לאוגוסט 2015 #

הנה הקוד בהעתקה זה משתבש אני מקווה שתוכלו לעזור לי . תודה

<?php
 
  $per_page = 2;
  $page = 1;
 
  if (isset($_GET['page']))
  {
    $page = intval($_GET['page']);
    if($page < 1) $page = 1;
  }
  $start_from = ($page - 1) * $per_page;
  if(isset($_POST['submit'])){
 
  $name=$_POST['name'];
  $kategor =$_POST['kategor'];
  $city_esek =$_POST['city_esek'];
   $mysqli = new mysqli('localhost', 'root', '', 'biznees') or die('vvvvvvvvvv');
$mysqli->query("SET NAMES 'utf8'");  
  if($kategor =="כל הקטגוריות"){
  $kategor="" ;
  }
  if($city_esek =="כל האזורים"){
  $city_esek="" ;
  }
   
  $sql="SELECT name, description,address,city FROM info WHERE kategor  LIKE '%" . $kategor .  "%'  and name LIKE '%" . $name .  "%'  and city LIKE '%" . $city_esek .  "%' LIMIT $start_from, $per_page";
  //-run  the query against the mysql query function
  $result=$mysqli->query($sql);
  if ($result = $mysqli->query("SELECT name, description,address, city FROM info WHERE kategor  LIKE '%" . $kategor .  "%'  and name LIKE '%" . $name .  "%'  and city LIKE '%" . $city_esek .  "%' ")) {
  echo "מספר תוצאות שנמצאו: ";
print $result->num_rows;}


$current_items = $mysqli->query( "SELECT name, description,address,city FROM info WHERE kategor  LIKE '%" . $kategor .  "%'  and name LIKE '%" . $name .  "%'  and city LIKE '%" . $city_esek .  "%' LIMIT $start_from, $per_page");


 if( mysqli_num_rows($current_items) > 0)
 {
while($row = mysqli_fetch_array($result)){
  while( $row= mysqli_fetch_assoc($current_items)){
     
    echo" <section class=reka_asakim>";
  echo "<section class=warp>";
echo "<TABLE  width=760  cellpadding=5  >";
echo "</BR>";
 echo "<TR>";
       
        echo "<TD width=300 align=\"right\"><h2>"."&nbsp".$row["name"]."</h2></TD>";
    echo "<TD width=300 align=\"left\">"."מבצעים"."</TD>";
    echo "</TR>";
     echo "<TR>";
        echo "<TD width=300 align=\"right\"><h4>"."&nbsp".$row["description"]."</h4></TD>";
     echo "<TD width=300 align=\"center\">"." "."</TD>";
       echo "</TR>";
        echo "<TR>";
   echo "<TD width=300 align=\"right\">"."&nbsp".$row["address"]."&nbsp".$row["city"]."</TD>";
      echo "<TD width=300 align=\"left\">"."פרטים נוספים"."</TD>";
   
       echo "</TR>";
    //echo "<section class=nnn></section>";
  echo "</table>";
  echo "</section>";
 echo "</BR>";
 
  }
  echo " </section>";//<!--reka_asakim-->  
  }
}
 
     
     
 else
 {
  echo 'לא נמצא דף זה';
 }
   
  }
  function hgdara(){
    $per_page = 2;
  $page = 1;
   if (isset($_GET['page']))
  {
    $page = intval($_GET['page']);
    if($page < 1) $page = 1;
  }
  $start_from = ($page - 1) * $per_page;
    if(isset($_POST['submit']) ){
    global $name;
  $name=$_POST['name'];
  global $kategor ;
  $kategor =$_POST['kategor'];
  global $city_esek ;
  $city_esek =$_POST['city_esek'];

  if($kategor =="כל הקטגוריות"){
  $kategor="" ;
  }
  if($city_esek =="כל האזורים"){
  $city_esek="" ;
  }
   
   $mysqli = new mysqli('localhost', 'root', '', 'biznees') or die('vvvvvvvvvv');
   $mysqli->query("SET NAMES 'utf8'");  
  $total_rows = $mysqli->query("SELECT COUNT(id)  FROM info WHERE kategor  LIKE '%" . $kategor .  "%'  and name LIKE '%" . $name .  "%'  and city LIKE '%" . $city_esek .  "%'");
 $total_rows = mysqli_fetch_row($total_rows);
 $total_rows = $total_rows[0];
 
 $total_pages = $total_rows / $per_page;
 $total_pages = ceil($total_pages); # 19/5 = 3.8 ~=~ 4
    echo  '<br/>';
 

  echo " <section class=all_buttom>";
 
 for($i = 1; $i  <= $total_pages; ++$i)
 {
  echo "<a href='?page=$i'><div class=namber_buttom>$i</div></a> ";
 }
    }
   echo "</section>";
}

   hgdara();

avatar ענה Splash ב 20 לאוגוסט 2015 #

האם את מודעת לחוסר סדר שקיים כאן ? יהיה צורך בניקוי יסודי אחר כך.

כמו שרשמתי למעלה,את השתמשת ב post בטופס אך על מנת שיהיה אפשר להעביר את הנתונים בין דף לדף בנוחות יהיה עדיף להשתמש ב get במקרה הזה.

הנתונים -

$name=$_POST['name'];
  $kategor =$_POST['kategor'];
  $city_esek =$_POST['city_esek'];


יצטרכו להפוך ל -
$name=$_GET['name'];
        $kategor =$_GET['kategor'];
        $city_esek =$_GET['city_esek'];


ובטופס [שלא נכלל כאן בקוד] תצטרכי לשנות את ה method מ post ל get.

עכשיו כדי להכליל את הנתונים בתוך העמודים השורה -
echo "<a href='?page=$i'><div class=namber_buttom>$i</div></a> ";


צריכה להיות-
echo "<a href='?page=$i&city_esek=$city_esek&kategor=$kategor&name=$name'><div class=namber_buttom>$i</div></a> ";


בנוסף לחוסר סדר קיימת כאן גם פרצת אבטחה [sql injection] כהוכחה לכך את מוסמנת לכתוב בתוך השדה city_esek את התו ' ותראי שהשאילתה שלך לא מצליחה לרוץ.

avatar ענה mirim ב 20 לאוגוסט 2015 #

תודה רבה על השקעתך ותשובתך!!!
אך לצערי ביצעתי את הנכתב ולא רק שאינו מועיל הוא מחזיר אותי אחור ואסביר:
כעת עדיין בלחיצה על מעבר לעמוד הבא הוא אינו עובר ובלחיצה שוב על שלח הוא חוזר ומראה רק את התוצאות שבעמוד הראשון.
אשמח מאוד לעזרתך!!!
שנית מאוד מענין אותי לגבי הפירצה באבטחה , איך מתמודדים עם זה??

avatar ענה Splash ב 20 לאוגוסט 2015 #

האם שינית בכל המקומות את $_POST ל $_GET ? [גם בפונקציה hgdara] וגם בתנאי שבודק את ה submit

לגבי הפירצה את מוזמנת לקרוא מידע בדף הנ"ל - https://phpguide.co.il/SQL_Injection.htm
רק לשים לב שמדובר במאמר ישן מאוד וחלק לא רלוונטי [החלק של ה mysql_*] בנוסף הוא מסביר שם על עבודה מול PDO אבל באותה מידה אפשר לבצע prepared statements גם ב mysqli - http://php.net/manual/en/mysqli.prepare.php

avatar ענה mirim ב 23 לאוגוסט 2015 #

תודה לך, אך אני שיניתי את כל הpost בקוד ולא קרה השינוי . יש לך אולי עיצה???????????

avatar ענה Splash ב 24 לאוגוסט 2015 #

האמת היא שמאוד קשה לראות משהו מהקוד הזה,אם תוכלי להציג את הקוד העדכני שיש כרגע זה יהיה יותר נוח ואם תוכלי להעלות את האתר לאינטרנט כדי שיהיה אפשר לראות מה הולך שם זה יהיה יותר קל להבין מה השתבש.

avatar ענה mirim ב 04 לספטמבר 2015 #

תודה על העזרה העלתי את האתר לשרת וזהו הקישור

הקוד מצורף גם כן:

<div class="page">
  <header>
    <section class="top"> <a class="top"href="#">צור חשבון</a> <a class="top" href="#">כניסה</a> <a class="leaft" href="#">תוכלו להתקשר תמיד</a> <a class="phone" href="index.html">077-2619393</a> </section>
    <!--top-->
    <nav> <a class="logo" href="index.html"><img src="image_index/images/kogo.jpd_03.jpg" width="230" height="96" alt="logo,לוגו"></a>
      <section class="buttom">
       <a href="index.html" >דף הבית</a>
        <a href="abut.html">אודותינו</a>
        <a href="pages.php"  style="color:#000">אינדקס עסקים</a>
        <a href="zurkesher.html">צור קשר</a>
        </section><!--buttom-->
    </nav>
  </header>
  <article>
 <section class="Search">
  <form action="" method="get">
  <section class="div_tategor">
  <p>בחר קטגוריה</p>
  <select name="kategor" class="search_form" >
 <option value="כל הקטגוריות"> כל הקטגוריות</option>
 <option value="ביטוח ופיננסים"> ביטוח ופיננסים</option>
 <option value="שרותים לעסק"> שרותים לעסק</option>
 <option value="מוצרים לבית"> מוצרים לבית</option>
 <option value="קורסים ולימודים">קורסים ולימודים</option>
 <option value="רכב ותיירות"> רכב ותיירות</option>
 <option value="נדלן"> נדלן</option>
 <option value="בעלי מקצוע"> בעלי מקצוע</option>
 <option value="נושא אחר"> נושא אחר</option>
 </select>
 </section>
  <section class="div_tategor"><p>בחר אזור</p>
  <select name="city_esek" class="search_form" >
  <option value="כל האזורים"> כל האזורים</option>
  <option value="ביתר"> ביתר</option>
  <option value="בני ברק"> בני ברק</option>
  </select>
  </section>
<section class="div_tategor">
  <p>חיפוש לפי שם עסק</p>
   <input  type="text" name="name" class="search_form1">
    </section>
    <section class="div_tategor">
  <input  type="submit" name="submit" class="search_buttom" value="חפש" > </section>
  </form></section>
   
  <section class="reka">
<?php
 
  $per_page = 4;
  $page = 1;
 
  if (isset($_GET['page']))
  {
    $page = intval($_GET['page']);
    if($page < 1) $page = 1;
  }
  $start_from = ($page - 1) * $per_page;
  if(isset($_GET['submit'])){
 
  $name=$_GET['name'];
  $kategor =$_GET['kategor'];
  $city_esek =$_GET['city_esek'];
   $mysqli = new mysqli('1", '', '', '') or die('vvvvvvvvvv');
$mysqli->query("SET NAMES '
utf8'");  
  if($kategor =="כל הקטגוריות"){
  $kategor="" ;
  }
  if($city_esek =="כל האזורים"){
  $city_esek="" ;
  }
   
  $sql="SELECT name, description,address,city FROM info WHERE kategor  LIKE '
%" . $kategor .  "%'  and name LIKE '%" . $name .  "%'  and city LIKE '%" . $city_esek .  "%' LIMIT $start_from, $per_page";
  //-run  the query against the mysql query function
  $result=$mysqli->query($sql);
  if ($result = $mysqli->query("SELECT id,name, description,address, city FROM info WHERE kategor  LIKE '
%" . $kategor .  "%'  and name LIKE '%" . $name .  "%'  and city LIKE '%" . $city_esek .  "%' ")) {
  echo "מספר תוצאות שנמצאו: ";
print $result->num_rows;}


$current_items = $mysqli->query( "SELECT id,name, description,address,city FROM info WHERE kategor  LIKE '
%" . $kategor .  "%'  and name LIKE '%" . $name .  "%'  and city LIKE '%" . $city_esek .  "%' LIMIT $start_from, $per_page");

 if( mysqli_num_rows($current_items) > 0)
 {
while($row = mysqli_fetch_array($result)){
  while( $row= mysqli_fetch_assoc($current_items)){
    $x=$row['
id'];
    echo" <section class=reka_asakim>";
  echo "<section class=warp>";
echo "<TABLE  width=760  cellpadding=5  >";
echo "</BR>";
 echo "<TR>";
       
        echo "<TD width=300 align=\"right\"><h2>"."&nbsp".$row["name"]."</h2></TD>";
    echo "<TD width=300 align=\"center\"><a href='
show.php?id=$x'><input type=button class=next_sale name=pratim  value=מבצעים />"."</a></TD>";
    echo "</TR>";
     echo "<TR>";
        echo "<TD width=300 align=\"right\"><h4>"."&nbsp".$row["description"]."</h4></TD>";
     echo "<TD width=300 align=\"center\">"." "."</TD>";
       echo "</TR>";
        echo "<TR>";
   echo "<TD width=300 align=\"right\">"."&nbsp".$row["address"]."&nbsp".$row["city"]."</TD>";
  echo "<TD width=300 align=\"center\"><a href='
show.php?id=$x'><input type=button class=next_pratim name=pratim  value=פרטים-נוספים /> "."</div></a></TD>";
       echo "</TR>"; 
  echo "</table>";
  echo "</section>";
 echo "</BR>";
 
  }
  echo " </section>";//<!--reka_asakim-->  
  }
}
 
     
     
 else
 {
  echo '
לא נמצא דף זה';
 }
   
  }
  function hgdara(){
    $per_page = 2;
  $page = 1;
   if (isset($_GET['
page']))
  {
    $page = intval($_GET['
page']);
    if($page < 1) $page = 1;
  }
  $start_from = ($page - 1) * $per_page;
    if(isset($_GET['
submit']) ){
    global $name;
  $name=$_GET['
name'];
  global $kategor ;
  $kategor =$_GET['
kategor'];
  global $city_esek ;
  $city_esek =$_GET['
city_esek'];

  if($kategor =="כל הקטגוריות"){
  $kategor="" ;
  }
  if($city_esek =="כל האזורים"){
  $city_esek="" ;
  }
   
   $mysqli = new mysqli('
127.0', '', '', '') or die('vvvvvvvvvv');
   $mysqli->query("SET NAMES '
utf8'");  
  $total_rows = $mysqli->query("SELECT COUNT(id)  FROM info WHERE kategor  LIKE '
%" . $kategor .  "%'  and name LIKE '%" . $name .  "%'  and city LIKE '%" . $city_esek .  "%'");
 $total_rows = mysqli_fetch_row($total_rows);
 $total_rows = $total_rows[0];
 
 $total_pages = $total_rows / $per_page;
 $total_pages = ceil($total_pages); # 19/5 = 3.8 ~=~ 4
    echo  '
<br/>';
 

  echo " <section class=all_buttom>";
 
 for($i = 1; $i  <= $total_pages; ++$i)
 {
  echo "<a href='
?page=$i&city_esek=$city_esek&kategor=$kategor&name=$name'><div class=namber_buttom>$i</div></a> ";
 }
    }
   echo "</section>";
}

   hgdara();
   
 

 
 
  ?>


עזרתכם חשובה לי מאוד
תודה רבה

avatar ענה Splash ב 04 לספטמבר 2015 #

דבר ראשון אני ממליץ למחוק את החלק של הסיסמאות מהקוד,גם אם מדובר באחסון זמני אין טעם שהם יפורסמו.
לגבי החיפוש שכחת בקישור לכלול את המשתנה submit ולכן החיפוש לא בוצע כמו שצריך.

שיניתי לך טיפה את הקוד אשמח אם תוכלי להעלות את הקוד הנ"ל -

<?php

$per_page = 4;
$page = 1;

if (isset($_GET['page']))
{
    $page = intval($_GET['page']);
    if($page < 1) $page = 1;
}
$start_from = ($page - 1) * $per_page;
if(isset($_GET['submit'])){

    $name=$_GET['name'];
    $kategor =$_GET['kategor'];
    $city_esek =$_GET['city_esek'];
    $mysqli = new mysqli('127.0.0.1', '', '', '') or die('vvvvvvvvvv');
    $mysqli->query("SET NAMES 'utf8'");
    if($kategor =="כל הקטגוריות"){
        $kategor="" ;
    }
    if($city_esek =="כל האזורים"){
        $city_esek="" ;
    }

    $current_items = $mysqli->query( "SELECT id,name, description,address,city FROM info WHERE kategor  LIKE '%" . $kategor .  "%'  and name LIKE '%" . $name .  "%'  and city LIKE '%" . $city_esek .  "%' LIMIT $start_from, $per_page");

    if( mysqli_num_rows($current_items) > 0)
    {
            while( $row= mysqli_fetch_assoc($current_items)){
                $x=$row['id'];
                echo" <section class=reka_asakim>";
                echo "<section class=warp>";
                echo "<TABLE  width=760  cellpadding=5  >";
                echo "</BR>";
                echo "<TR>";

                echo "<TD width=300 align=\"right\"><h2>"."&nbsp".$row["name"]."</h2></TD>";
                echo "<TD width=300 align=\"center\"><a href='show.php?id=$x'><input type=button class=next_sale name=pratim  value=מבצעים />"."</a></TD>";
                echo "</TR>";
                echo "<TR>";
                echo "<TD width=300 align=\"right\"><h4>"."&nbsp".$row["description"]."</h4></TD>";
                echo "<TD width=300 align=\"center\">"." "."</TD>";
                echo "</TR>";
                echo "<TR>";
                echo "<TD width=300 align=\"right\">"."&nbsp".$row["address"]."&nbsp".$row["city"]."</TD>";
                echo "<TD width=300 align=\"center\"><a href='show.php?id=$x'><input type=button class=next_pratim name=pratim  value=פרטים-נוספים /> "."</div></a></TD>";
                echo "</TR>";
                echo "</table>";
                echo "</section>";
                echo "</BR>";

            }
            echo " </section>";//<!--reka_asakim-->
    }

    else
    {
        echo 'לא נמצא דף זה';
    }

    echo  '<br/>';


    echo " <section class=all_buttom>";
   
    $total_rows = $mysqli->query("SELECT COUNT(id)  FROM info WHERE kategor  LIKE '%" . $kategor .  "%'  and name LIKE '%" . $name .  "%'  and city LIKE '%" . $city_esek .  "%'");
    $total_rows = mysqli_fetch_row($total_rows);
    $total_rows = $total_rows[0];
    $total_pages = ceil($total_rows / $per_page);

    for($i = 1; $i  <= $total_pages; ++$i)
    {
        echo "<a href='?submit=חפש&page=$i&city_esek=$city_esek&kategor=$kategor&name=$name'><div class=namber_buttom>$i</div></a> ";
    }

    echo "</section>";
}
?>

avatar ענה mirim ב 04 לספטמבר 2015 #

זה עובד!!!!!
תודה רבה ,ענקית,עצומה!!!!
גם על מהירות התגובה וגם על מקצועיות ברמה!!!!
מאוד יפה ומסקרן אותי מספור העמודים באתר כאן בבחירת הפוסטים למטה יש אפשרות לבחור
מספר עמוד קו נגלל.
אשמח לדעת כיצד ניתן לעשות זאת (ולא שכל מספרי העמודים יופיעו ביחד), תודה מראש.

avatar ענה Splash ב 04 לספטמבר 2015 #

את כל האפקטים שאת רואה בדפדפן עושים בעזרת javascript/css יש המון מדריכים באינטרנט שיכולים להסביר לך על איך ליצור אנימציות.
במקרה הזה מדובר בפלאגין של jquery שנקרא Paginator 3000
יש לך בתיקיה demo קובץ דוגמא לאיך לעבוד עם הפלאגין.

avatar ענה mirim ב 05 לספטמבר 2015 #

תודה רבה!
ושבוע טוב אנסה את מה שאתה ממליץ.

avatar ענה Splash ב 06 לספטמבר 2015 #

אני דווקא מהאנשים שחושבים שכתיבה של "עמודים" היא בזבוז של שאילתה שלא עוזרת למשתמש.
אני לא רואה את הסיבה שבשבילה המשתמש ידלג מעמוד 1 ל 3 ,אם הוא יודע מה הוא מחפש שישתמש בחיפוש.

אני אוהב את הסגנון של Infinite scroll [פייסבוק] או פשוט כפתור של עמוד הבא בלי להציג את הכמות עמודים שנשאר.

avatar ענה tra ב 08 לספטמבר 2015 #

האתר הזה גם פועל כך. נראה לי משום מה שרובם עובדים כ

avatar ענה Splash ב 08 לספטמבר 2015 #

מי זה "רובם" וממתי מחליטים אם משהו הוא נכון או לא לפי מה שהרוב עושים ? אני יכול להראות לך מיליון דוגמאות של אתרים שאין בהם עמודים.
זה עניין של טעם וכמובן התוכן שמוצג בתוך העמודים.אישית אני לא רואה סיבה לשים עמודים בדף שמציג עסקים שכן אם מישהו היה מחפש עסק ספציפי הוא היה רושם את השם שלו בחיפוש